package com.example.testapplication;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.SimpleAdapter;
import android.widget.Spinner;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class SpinnerDemo extends AppCompatActivity {
    // 定义下拉列表需要显示的文本数组
    private String[] starArray = {"水星", "金星", "地球", "火星", "木星", "土星"};
    // 定义下拉列表需要显示的行星图标数组
    private int[] iconArray = {R.drawable.shuixing, R.drawable.jinxing, R.drawable.diqiu,
            R.drawable.huoxing, R.drawable.muxing, R.drawable.tuxing};
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_spinner_demo);

        initSpinner();
        initSpinnerForSimpleAdapter();
    }

    private void initSpinnerForSimpleAdapter() {
        // 声明一个映射对象的队列 用于保存行星的图标与名称配对信息
        List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
        // iconArray是行星的图标数组，startArray是行星的名称数组
        for(int i = 0;i<iconArray.length;i++){
            Map<String,Object>item = new HashMap<String,Object>();
            item.put("icon",iconArray[i]);
            item.put("name",starArray[i]);
            // 把一个行星图标与名称的配对映射添加到队列当中
            list.add(item);
        }

        // 声明一个下拉框列表的简单适配器，其中指定了图标与文本两组数据
        SimpleAdapter simpleAdapter = new SimpleAdapter(this,list,
                R.layout.item_simple,new String[]{"icon","name"},new int[]{R.id.iv_picon,R.id.tv_pname});

        // 设置简单适配器的布局样式
        simpleAdapter.setDropDownViewResource(R.layout.item_simple);
        // 从布局文件获取sp_icon
        Spinner sp = findViewById(R.id.sp_icon);
        // 设置下拉框的标题
        sp.setPrompt("请选择行星");
        // 设置下拉框的简单适配器
        sp.setAdapter(simpleAdapter);
        // 设置下拉框默认显示第一项
        sp.setSelection(0);
        // 给下拉框设置选择监听器，一旦用户选中某一项，就触发监听器的onItemSelected方法
        sp.setOnItemSelectedListener(new MySelectedListener());


    }

    private void initSpinner() {
        // 声明一个下拉列表的数组适配器
        ArrayAdapter<String> starAdapter = new ArrayAdapter<String>(this,R.layout.item_select,starArray);
        // 设置数组适配器的布局样式
        starAdapter.setDropDownViewResource(R.layout.item_dropdown);
        // 从布局文件中获取下拉框属性
        Spinner sp = findViewById(R.id.sp_dialog);
        // 设置下拉框的标题
        sp.setPrompt("请选择行星");
        // 设置下拉框的数组适配器
        sp.setAdapter(starAdapter);
        // 设置下拉框默认显示第一项
        sp.setSelection(0);
        // 给下拉框设置监听器，一旦用户选中某一项，就触发监听器onItemSelected方法
        sp.setOnItemSelectedListener(new MySelectedListener());
    }


    private class MySelectedListener implements android.widget.AdapterView.OnItemSelectedListener {
        @Override
        public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
            Toast.makeText(SpinnerDemo.this, "您选择的是" + starArray[i], Toast.LENGTH_SHORT).show();

        }
        //// 未选择时的处理方法，通常无需关注
        @Override
        public void onNothingSelected(AdapterView<?> adapterView) {

        }
    }
}